package com.ruc.deke.dao;

import java.util.ArrayList;

import com.ruc.deke.model.DBRecord;
import com.ruc.deke.model.User;

public interface UserDAO {

	/**
	 * 通过用户的name 获取用户
	 * 
	 * @return
	 * @author: cyj
	 * @date: 2017年3月29日 下午3:30:10
	 */
	public ArrayList<DBRecord> getUserByName(String name);

	/**
	 * 向数据库添加一个用户
	 * 
	 * @param user
	 *            传来的用户信息
	 * @return
	 * @author: cyj
	 * @date: 2017年3月30日 下午2:15:07
	 */
	public void addUser(User user);

	/**
	 * 获取用户的做题状态
	 * 
	 * @param userId
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午12:09:52
	 */
	public ArrayList<DBRecord> getUserExpStatusByUserId(int userId);

	/**
	 * 获取用户做题状态
	 * 
	 * @param userId
	 * @param moduleId
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午12:11:40
	 */
	public ArrayList<DBRecord> getUserExpStatusByUserIdAndModuleID(int userId, int moduleId);
	
	/**
	 * 获取用户做题状态-by paper
	 * 
	 * @param userId
	 * @param moduleId
	 * @return
	 * @author: gyh_f
	 * @date: 2017年4月1日 下午12:11:40
	 */
	public ArrayList<DBRecord> getUserExpStatusByUserIdAndPaperId(int userId, String paperId);

	/**
	 * 根据学生所在的唯一学校专业班级获取学生名单
	 * 
	 * @param ano
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午3:45:19
	 */
	public ArrayList<DBRecord> getUsersByAno(String ano);

	/**
	 * 根据学生id更新学生表
	 * 
	 * @param newRecord
	 *            想要跟新成的值
	 * @param conditions
	 *            更新的条件、限制范围
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午4:10:11
	 */
	public String updateUser(DBRecord newRecord, DBRecord conditions);

	/**
	 * 根据ano选择某教师负责范围的学生在某module模块的成绩
	 * 
	 * @param ano
	 *            用户唯一归属id
	 * @param moduleId
	 *            某个题目模块
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午5:05:04
	 */
	public ArrayList<DBRecord> getUserScoresByModuleIdAndAno(String ano, int moduleId);

	/**
	 * 根据ano获取某个教师范围内的在某module模块做了题目的学生信息
	 * 
	 * @param ano
	 * @param moduleId
	 * @return
	 * @author: cyj
	 * @date: 2017年4月1日 下午9:04:46
	 */
	public ArrayList<DBRecord> getUsersByModuleIdAndAno(String ano, int moduleId);

	/**
	 * 获取已经提交答案的学生及答题信息(统计用)
	 * 
	 * @param moduleId
	 * @param ano
	 * @return
	 * @author: cyj
	 * @date: 2017年4月3日 下午10:56:44
	 */
	public ArrayList<DBRecord> haveSubmitedByAnoAndModule(int moduleId, String ano);

	/**
	 * 获取已经提交答案的学生及答题信息
	 * 
	 * @param moduleId
	 * @param ano
	 * @return
	 * @author: zzh
	 * @date: 2017年4月3日 下午10:56:44
	 */
	public ArrayList<DBRecord> haveSubmitedAllByAnoAndModule(int moduleId, String ano);

	/**
	 * 获取导师审核通过的学生
	 * 
	 * @param ano
	 * @return
	 * @author: cyj
	 * @date: 2017年4月6日 下午1:15:24
	 */
	public ArrayList<DBRecord> getRealUsersByAno(String ano);

	/**
	 * 获取已经保存（正在进行答题）的学生及答案保存的信息
	 * 
	 * @param moduleId
	 * @param ano
	 * @return
	 * @author: cyj
	 * @date: 2017年4月3日 下午10:57:52
	 */
	public ArrayList<DBRecord> haveSavedByAnoAndModule(int moduleId, String ano);

	/**
	 * 获取某个教师管理范围内的某个同学的模块成绩
	 * 
	 * @param moduleId
	 * @param userId
	 * @param ano
	 * @return
	 * @author: cyj
	 * @date: 2017年4月4日 下午10:18:00
	 */
	public ArrayList<DBRecord> getUserScoreByMoudleAndUserIdAndAno(int moduleId, int userId, String ano);

	/**
	 * 获取学生成绩
	 * 
	 * @param moduleId
	 * @param userId
	 * @return
	 * @author zzh
	 */
	public ArrayList<DBRecord> getScoreByModuleAndAno(String ano, int moduleId);

	public Boolean deleteRec(int userId);
	public String delUser(int userId);

}
